package ue.a2.a;
/*
 * @author: Stefan Schasse 569372
 */

/*************************************************************************
 * Aufgabe A (Schleifen, Simulation) [10 Punkte]:
 *
 * "Let’s make a Deal"
 *
 * In den 70er Jahren gab es eine Spielshow „Let’s make a Deal“ (In Deutschland in den Neunzigern bekannt als „Geh aufs Ganze!“),
 * wo dem Kandidaten drei Türen angeboten wurden. Hinter einer der Türen ist ein wertvoller Preis,
 * hinter den anderen beiden Türen befindet sich nichts. Nachdem der Kandidat eine Tür gewählt hat,
 * öffnet der Moderator eine der beiden anderen Türen (wobei er natürlich nie eine Tür mit dem Preis öffnen würde).
 * Dem Kandidaten wird dann die Möglichkeit gegeben, zu einer anderen geschlossenen Tür zu wechseln.
 * Sollte der Kandidat dies tun? Intuitiv könnte der Kandidat annehmen, dass seine ursprünglich ausgewählte Tür und die
 * andere ungeöffnete Tür mit gleicher Wahrscheinlichkeit den Preis enthalten und es somit keinen Grund zum Wechseln gibt.
 *
 * Schreiben Sie ein Programm MonteHall.java um diese Erwartung mittels Simulation zu überprüfen.
 * Ihr Programm sollte abhängig vom Kommandozeilenparameter N dieses Spiel N-mal für jede Strategie
 * (Wechseln / Nichtwechseln) ausführen und die mittlere Erfolgschance für jede Strategie
 * (#der gewonnenen Spiel / # der Spiele = N) ausgeben.
 *
 * Abgabedatei in Moodle: MonteHall.java
 *
 * Aufruf & Ausgabe:
 *
 * $ java MonteHall 10
 * Wechseln: 0.5
 * Nichtwechseln: 0.5
 *
 *************************************************************************/

/***************
 *
 * Die Aufgabe ist nicht eindeutig. Ich habe die Interpretation mit N Durchläufen genommen, bei dem gilt p(wechsel)= 1-p(bleiben)
 * Wenn man 2N Durchläufe haben will, müsstemn zwei Zählvariablen wechsel und nichtwechsel definiert werden, eine FOR Schleife von 0 bis 1
 * implementiert und im ersten Durchgang (if i=0) die Wechselvar erghöht werden, wenn ein Wechsel zum PReis führt, im zweiten Durchgang
 * (if i=1) die Nichtwechselvar erhöht werden, wenn ein Bleiben zum Preis führt.
 * Durch die Zufälligkeit würden jedoch beide Wahrscheinlichkeiten sich nicht zu 1 addieren.
 * Aufgrund der längeren Laufzeit und etwas verwirrenden Wahrscheinlichkeitsausgaben wurde hier nach Rücksprache mit meinem Übungsleiter
 * die erste Interpretation umgesetzt.
 */
public class MonteHall {

	public static void main(String[] args) {
		// argumentübernahme
		int N = Integer.parseInt(args[0]);

		// Variablendefinition
		int wechseln = 0;

		// schleife N mal
		for (int i = 0; i < N; i=i+1) {

			// Türen {0,1,2}

			// Bestimmung der Preistür
			int preis = (int) (3 * Math.random());

			// Bestimmung der vom Kandidaten gewählten Tür
			int kandidat = (int) (3 * Math.random());

			// Bestimmung der vom Moderatoren geöffneten Tür: Eine der verbleibenden Türen, jedoch nie die Preistür
			int moderator;
			do {
				moderator = (int) (3 * Math.random());
			} while ((moderator == preis) || (moderator == kandidat));

			// Der Kandidat hat die Wahl seine Kandidatentür zu behalten oder auf die noch verbleibende Tür zu wechseln
			// Menge der verbleibenden Türen (1elementing) = {0,1,2} / {kandidat,moderator}
			int rest = (0 + 1 + 2) - kandidat - moderator;

			// System.out.print("Preis:"+preis+" Kandidat öffnet:"+kandidat+" Moderator öffnet:"+moderator+" Verbleibende Tür:"+rest);

			// Zählen, wenn die Wechselstrategie den Kandidaten zur Preistür führen würde
			if (kandidat != preis) {
				wechseln = wechseln+1;
			}
		}
		System.out.println("Wechseln: " + ((double) wechseln/N));
		System.out.println("Nichtwechseln: " + ((double) (N-wechseln)/N));
	}
}